package com.example.fanplant.controller;

import com.alibaba.fastjson.JSONObject;
import com.example.fanplant.model.*;
import com.example.fanplant.respository.RegionRepository;
import com.example.fanplant.respository.TestRepository;
import com.example.fanplant.respository.VitaeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@RestController

@RequestMapping("/test")
public class TestController {

    @Autowired
    private TestRepository testRepository;
    @Autowired
    private VitaeRepository vitaeRepository;
    @Autowired
    private RegionRepository regionRepository;



    //查词所有用户  http://localhost:8080/test/layui
    @GetMapping("/layui")
    public ModelAndView testlayui(Model model) {
        System.err.println("layui====>>");

        return new ModelAndView("bootstarp/index", "userModel", model);
    }

    //查词所有用户  http://localhost:8080/test/getlist
    @GetMapping("/getlist")
    public ModelAndView getlist(Model model) {
        System.err.println("layui====>>");

        return new ModelAndView("bootstarp/test-list", "userModel", model);
    }


    /**
     * 2、通过HttpServletRequest接收    http://localhost:8080/test/test_access_request
     *
     * @param request
     * @return success
     */
    @RequestMapping("/test_access_request")
    public JSONObject test_access_request(HttpServletRequest request) {
        System.err.println("test_access_request====>>");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username is:" + username);
        System.out.println("password is:" + password);

        Iterable<User> ss = testRepository.findAll();
//        userRepository.existsById()
        List<User> list = new ArrayList<>();
        Iterator<User> iter = ss.iterator();
        while (iter.hasNext()) {
            User user = iter.next();
            list.add(user);
        }

        Test test = new Test("这是二级标题", list);
        JSONResult jsonResult = new JSONResult(0, "get list success", test);
        return jsonResult.getJson();
    }

    //查词所有用户  http://localhost:8080/test/vitaelist
    @GetMapping("/vitaelist")
    public JSONResult testVitaeList(Model model) {//增加级联查询

        List<Vitae_table> newsList;
        List<Region> regionList;
        regionList = regionRepository.findByIdBefore(20);
        newsList = vitaeRepository.findByIdBefore(100);//success   在该id之前的
        System.err.println("regionList====>>" + regionList.size() + "   :" + regionList.get(3).getVitae_tableList().size());//success
        System.err.println("newsList====>>" + newsList.size());


        //简历内容需要移送到新建表
        // 这里内容怎么拿出来呢
        //        在这里查询all  然后update all就可以了
        //        在这里查询all  然后update all就可以了
        //        在这里查询all  然后update all就可以了
        //        在这里查询all  然后update all就可以了
        //        在这里查询all  然后update all就可以了

        JSONResult jsonResult = new JSONResult(0, "get list success", newsList);

        for (int i = 0; i < newsList.size(); i++) {
            Vitae_table va = newsList.get(i);
            System.err.println("user" + i + "    name:" + va.getName() + "   email:" + va.getEmail() + "    va:" + va.getRegion().getRegion_name());
        }
        return jsonResult;
    }

    //查词所有用户  http://localhost:8080/test/testlist
    @GetMapping("/testlist")
    public ModelAndView testlist(Model model) {
        System.err.println("testlist====>>");

        model.addAttribute("userList", testRepository.findAll());
        model.addAttribute("title", "用户管理");

        List<User> newsList;

        Sort sort = Sort.by(Sort.Direction.DESC, "id");
        Pageable pageable = PageRequest.of(0, 2, sort);//success
//        List<User> newsList = userRepository.findUserByName("zl03");
//        List<User> newsList = userRepository.findUserList("zl03");
        newsList = testRepository.findUserByName("zl03", pageable);//success    分页查询 注意参数的类型，其中size要大于等于1，page则是从0开始算起
        System.err.println("newsList====>>" + newsList.size() + "      pageable" + pageable.getPageSize() + "   ");

        newsList = testRepository.findByname("zl03");//success
        System.err.println("newsList====>>" + newsList.size());

        newsList = testRepository.findBynameAndAge("zl03", "6");//success
        System.err.println("newsList====>>" + newsList.size());

        newsList = testRepository.findBynameLike("zl");//success
        System.err.println("findBynameLike1====>>" + newsList.size());

        newsList = testRepository.findBynameLike("8%%");//success
        System.err.println("findBynameLike2====>>" + newsList.size());

        newsList = testRepository.findUserByAgeIsNot("123");//success
        System.err.println("newsList====>>" + newsList.size());


        newsList = testRepository.findByIdBetween(0l, 30l);//success
        System.err.println("findByIdBetween====>>" + newsList.size());

        newsList = testRepository.findByIdLessThan(100L);//success
        System.err.println("findByIdLessThan====>>" + newsList.size());

        newsList = testRepository.findFirstByAge("6");//success
        System.err.println("newsList====>>" + newsList.size() + "   :" + (newsList.size() > 0 ? newsList.get(0).getName() : "null"));


        User user = new User(null, "zl036", "3306@qq.com", "27");
        testRepository.save(user);


        user = new User(6l, "zl036", "3307@qq.com", "2799");//更新 success  记得要有该id
        testRepository.save(user);

        newsList = testRepository.findByIdBefore(20l);//success   在该id之前的
        System.err.println("newsList====>>" + newsList.size());

        user = new User(38l, null, null, null);
        testRepository.delete(user); //success 不存在不会报错
//        testRepository.deleteById(37l);//half 不存在会报错
//        System.err.println("delete result====>>" + result);
        return new ModelAndView("test/testlist", "userModel", model);
    }

    /*
     * DISTINCT  重复值
     * WHERE  规定选择
     * AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤
     * ORDER BY 语句用于对结果集进行排序
     *TOP 子句用于规定要返回的记录的数目  对于拥有数千条记录的大型表来说，TOP 子句是非常有用的
     * LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
     * SQL 通配符可以替代一个或多个字符您可以使用 SQL 通配符。 SQL 通配符必须与 LIKE 运算符一起使用
     *IN 操作符允许我们在 WHERE 子句中规定多个值。
     * And --- 等价于 SQL 中的 and 关键字，比如 findByUsernameAndPassword(String user, Striang pwd)；
 *Or --- 等价于 SQL 中的 or 关键字，比如 findByUsernameOrAddress(String user, String addr)；
 *Between --- 等价于 SQL 中的 between 关键字，比如 findBySalaryBetween(int max, int min)；
 *LessThan --- 等价于 SQL 中的 "<"，比如 findBySalaryLessThan(int max)；
 *GreaterThan --- 等价于 SQL 中的">"，比如 findBySalaryGreaterThan(int min)；
 *IsNull --- 等价于 SQL 中的 "is null"，比如 findByUsernameIsNull()；
 *IsNotNull --- 等价于 SQL 中的 "is not null"，比如 findByUsernameIsNotNull()；
 *NotNull --- 与 IsNotNull 等价；
 *Like --- 等价于 SQL 中的 "like"，比如 findByUsernameLike(String user)；但是有一点需要注意的是，%需要我们自己来写
 *NotLike --- 等价于 SQL 中的 "not like"，比如 findByUsernameNotLike(String user)；
 *OrderBy --- 等价于 SQL 中的 "order by"，比如 findByUsernameOrderBySalaryAsc(String user)；
 *Not --- 等价于 SQL 中的 "！ ="，比如 findByUsernameNot(String user)；
 *In --- 等价于 SQL 中的 "in"，比如 findByUsernameIn(Collection<String> userList) ，方法的参数可以是 Collection 类型，也可以是数组或者不定长参数；
 *NotIn --- 等价于 SQL 中的 "not in"，比如 findByUsernameNotIn(Collection<String> userList) ，方法的参数可以是 Collection 类型，也可以是数组或者不定长参数；
————————————————
版权声明：本文为CSDN博主「zhw0596」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
原文链接：https://blog.csdn.net/zhw0596/article/details/106384221
     * */

}